﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LCTMoodle.Helper;
using LCTMoodle.Models.DataModels;
using LCTMoodle.Models.ViewModels;
using LCTMoodle.Service;

namespace LCTMoodle.Controllers
{
    public class HoiDapController : Controller
    {
        /// <summary>
        /// Hiển thị câu hỏi
        /// </summary>
        public ActionResult Index()
        {
            //Lấy câu hỏi
            List<CauHoiViewModel> cauHois = CauHoiService.layCauHoi();

            //Kiểm tra
            if (cauHois == null)
            {
                TempData["ThongBao"] =
                    new string[]
                    {
                        "Lấy danh sách câu hỏi thất bại"
                    };
                return View("Index", "TrangChu");
            }

            return View(cauHois);
        }

        /// <summary>
        /// Tìm câu hỏi theo querystring["ThongTin"]
        /// </summary>
        public ActionResult TimCauHoi()
        {
            //Lấy câu hỏi
            List<CauHoiViewModel> cauHois = CauHoiService.layCauHoiTheoThongTin_TimKiem(Request.QueryString["ThongTin"]);

            //Kiểm tra
            if (cauHois == null)
            {
                TempData["ThongBao"] =
                    new string[]
                    {
                        "Tìm câu hỏi thất bại"
                    };
                return View("Index", "TrangChu");
            }

            ViewData["TimKiem"] = Request.QueryString["ThongTin"];
            return View("Index", cauHois);
        }

        /// <summary>
        /// Trang đặt (tạo) câu hỏi mới
        /// </summary>
        public ActionResult DatCauHoi()
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                TempData["ThongBao"] =
                    new string[]
                    {
                        "Chưa đăng nhập (Đặt câu hỏi)"
                    };
                return RedirectToAction("Index", "TrangChu");
            }
            #endregion Kiểm tra quyền

            return View();
        }

        /// <summary>
        /// Hiển thị câu hỏi
        /// </summary>
        /// <param name="ma">Mã câu hỏi</param>
        public ActionResult CauHoi(int ma) 
        {
            //Lấy câu hỏi
            CauHoiViewModel cauHoi = CauHoiService.layCauHoiTheoMaCauHoi(ma);

            //Kiểm tra
            if (cauHoi == null)
            {
                TempData["ThongBao"] =
                    new string[]
                    {
                        "Lấy câu hỏi thất bại"
                    };
                return View("Index", "TrangChu");
            }

            return View(cauHoi);
        }

        /// <summary>
        /// Đăng câu hỏi
        /// </summary>
        [ValidateInput(false)]
        public ActionResult DangCauHoi(FormCollection form)
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                TempData["ThongBao"] = new string[]
                    {
                        "Chưa đăng nhập (Đăng câu hỏi)"
                    };
                return RedirectToAction("Index", "TrangChu");
            }
            #endregion Kiểm tra quyền

            #region Kiểm tra thông tin
            if (form["TieuDe"] == "" || form["NoiDung"] == "" || form["ChuDe"] == "")
            {
                TempData["ThongBao"] = new string[]
                    {
                        "Chưa đủ thông tin (Đăng câu hỏi)"
                    };
                return RedirectToAction("Index", "TrangChu");
            }
            #endregion Kiểm tra thông tin

            //Lấy câu hỏi
            CauHoiDataModel cauHoi = new CauHoiDataModel();
            cauHoi.tieuDe = form["TieuDe"];
            cauHoi.noiDung = form["NoiDung"];
            cauHoi.chuoiMaTuKhoa = "|" + form["ChuDe"] + "|";
            cauHoi.maNguoiTao = (Session["NguoiDung"] as NguoiDungViewModel).ma;
            
            //Thêm câu hỏi, kiểm tra
            int maCauHoi = CauHoiService.themCauHoi(cauHoi);
            if (maCauHoi == 0)
            {
                TempData["ThongBao"] = new string[]
                    {
                        "Thêm câu hỏi thất bại"
                    };
                return RedirectToAction("Index", "TrangChu");
            }

            return RedirectToAction("CauHoi", new { ma = maCauHoi });
        }

        /// <summary>
        /// Xóa câu hỏi
        /// </summary>
        /// <param name="ma">Mã câu hỏi</param>
        public ActionResult XoaCauHoi(int ma)
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                TempData["ThongBao"] = new string[]
                    {
                        "Chưa đăng nhập (Xóa câu hỏi)"
                    };
                return RedirectToAction("Index", "TrangChu");
            }

            //Lấy người dùng để kiểm tra quyền xóa (quản lý, người tạo)
            NguoiDungViewModel nguoiDung = Session["nguoiDung"] as NguoiDungViewModel;

            //Nếu người dùng là quản lý => có thể xóa
            if (nguoiDung.loaiNguoidung != "QuanLy")
            {
                //Lấy câu hỏi để kiểm tra quyền xóa (người tạo)
                CauHoiViewModel cauHoi = CauHoiService.layCauHoiTheoMaCauHoi(ma);

                //Kiểm tra
                if (cauHoi == null)
                {
                    TempData["ThongBao"] = new string[]
                    {
                        "Lấy câu hỏi thất bại (Xóa câu hỏi)"
                    };
                    return RedirectToAction("Index", "TrangChu");
                }

                //Kiểm tra quyền
                if (cauHoi.nguoiTao.ma == nguoiDung.ma)
                {
                    TempData["ThongBao"] = new string[]
                    {
                        "Không có quyền xóa câu hỏi"
                    };
                    return RedirectToAction("Index", "TrangChu");
                }
            }            
            #endregion Kiểm tra quyền

            //Xóa
            if (!CauHoiService.xoaCauHoiTheoMaCauHoi(ma))
            {
                TempData["ThongBao"] = new string[]
                    {
                        "Xóa câu hỏi thất bại"
                    };
                return RedirectToAction("Index", "TrangChu");
            }

            TempData["ThongBao"] = new string[]
                    {
                        "Xóa câu hỏi thành công",
                        "Tot"
                    };
            return RedirectToAction("Index");
        }

        /// <summary>
        /// Đánh giá câu hỏi tốt
        /// </summary>
        /// <param name="ma">Mã câu hỏi</param>
        public ContentResult DanhGiaCauHoiTot(int ma)
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                return Content("Chưa đăng nhập (Đánh giá câu hỏi tốt)");
            }
            
            //Kiểm tra người dùng có phải là người tạo câu hỏi hay không
            if ((Session["NguoiDung"] as NguoiDungViewModel).ma == CauHoiService.layCauHoiTheoMaCauHoi(ma).nguoiTao.ma)
            {
                return Content("Không thể tự đánh giá");
            }
            #endregion Kiểm tra quyền

            //Cập nhật & Kiểm tra
            if (!CauHoiService.capNhatDanhGiaCauHoi(ma, 1, (Session["NguoiDung"] as NguoiDungViewModel).ma))
            {
                return Content("Đánh giá câu hỏi tốt thất bại");
            }

            return Content("OK");
        }

        /// <summary>
        /// Đánh giá câu hỏi xấu
        /// </summary>
        /// <param name="ma">Mã câu hỏi</param>
        public ContentResult DanhGiaCauHoiXau(int ma)
        {
            #region Kiểm tra quyền
            //Kiểm tra xem người dùng đã đăng nhập chưa
            if (!TienIch.daDangNhap())
            {
                return Content("Chưa đăng nhập (Đánh giá câu hỏi xấu)");
            }

            //Kiểm tra người dùng có phải là người tạo câu hỏi hay không
            if ((Session["NguoiDung"] as NguoiDungViewModel).ma == CauHoiService.layCauHoiTheoMaCauHoi(ma).nguoiTao.ma)
            {
                return Content("Không thể tự đánh giá");
            }
            #endregion Kiểm tra quyền

            //Cập nhật & Kiểm tra
            if (!CauHoiService.capNhatDanhGiaCauHoi(ma, -1, (Session["NguoiDung"] as NguoiDungViewModel).ma))
            {
                return Content("Đánh giá câu hỏi xấu thất bại");
            }

            return Content("OK");
        }
    }
}
